﻿/*
 * InversibleParametricTransform
 * 
 * initial implementation : 4.6.2011
 *
 * Copyright (c) Adam Sida, asida@centrum.cz.
 * All rights reserved.
 * 
 * for license see Petra.Gis.License.txt
 */
using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using Petra.Gis.Geometry;


namespace Petra.Gis.ReferenceSystemServices.Transformations
{
  /// <summary>
  /// base class for transformations which can be computed in both direction
  /// forward and reverse and needs some parameters
  /// </summary>
  [DataContract(Name = "TRANSFORM")]
  public abstract class InversibleParametricTransform : ParametricTransform
  {


    /// <summary>
    /// xaml constructor
    /// </summary>
    protected InversibleParametricTransform()
      :base(){ }





    protected InversibleParametricTransform(CoordinateSystem sourceCS,
                            CoordinateSystem targetCS,
                            DistanceUnit distanceParamUnit,
                            AngularUnit angularParamUnit,
                            bool createInverse,
                            TransformParameters parameters
      )
      : base(sourceCS, targetCS, distanceParamUnit, angularParamUnit, parameters)
    {
      IsInverse = createInverse;
    }






    //protected InversibleParametricTransform(CoordinateSystem sourceCS,
    //                        CoordinateSystem targetCS,
    //                        DistanceUnit distanceParamUnit,
    //                        AngularUnit angularParamUnit,
    //                        bool createInverse,
    //                        params XParam[] parameters)
    //  : this(sourceCS, targetCS, distanceParamUnit, angularParamUnit, createInverse, new TransformParameters(parameters))
    //{ }





    //each math transform must be always inversible
    public override bool IsInversible
    {
      get { return true; }
    }




  }

}
